/**
 * 
 */
package br.com.beyondclick.model.dao;

import java.util.Date;
import java.util.List;
import java.util.Map;

import br.com.beyondclick.model.entity.Cheque;
import br.com.beyondclick.model.entity.Compra;
import br.com.beyondclick.model.entity.CompraMaterial;
import br.com.beyondclick.model.entity.CompraPedidoMaterial;
import br.com.beyondclick.model.entity.Material;
import br.com.beyondclick.model.entity.Pedido;
import br.com.beyondclick.model.entity.PedidoMaterial;
import br.com.gentech.commons.model.dao.CrudDAO;

/**
 * @author AC de Souza
 *
 */
public interface CompraDAO extends CrudDAO<Compra, Long>{

	/**
	 * Recuperar os objetos {@link Material} que estejam pendentes de serem comprados para atender a um {@link Pedido}.
	 * 
	 * @return
	 */
	public Map<Material, Long> findMateriaisPendentesCompra();

	/**
	 * Recuperar os objetos {@link PedidoMaterial} que estejam pendentes de serem comprados para atender a um {@link Pedido}.
	 * 
	 * @return
	 */
	public List<PedidoMaterial> findPedidoMaterialPendetes();

	/**
	 * Recuperar os objetos {@link CompraMaterial} que possuam exedentes comprados.
	 * 
	 * @return
	 */
	public Map<CompraMaterial, Long> findCompraMaterialEmEstoque();
	
	/***
	 * Recupera os cheques utlizados para comprar os materiais
	 * @param inicio
	 * @param fim
	 * @return Lista com os cheques
	 */
	public List<Cheque> findCheque(Date inicio, Date fim);
	
	/**
	 * Recupe as compras pagas por um cheque
	 * @param cheque
	 * @return Lista com as compras
	 */
	public List<CompraPedidoMaterial> find(Cheque cheque);

	public List<Compra> find(Date inicio, Date fim);
}